<?php

include_once '_database.php';
include_once '_logfile.php';

function init_param($key, $def) {
  $val = param($key);
  if (is_null($val)) {
    param($key, $def);
    $val = $def;
  }
  return $val;
}

function param($key, $value = null, $set_null = false) {
  if (is_null($value) && !$set_null) {
    return get_param($key);
  } else {
    return set_param($key, $value);
  }
}

function variable($key, $value = null, $set_null = false) {
  return param($key, $value, $set_null);
}

function set_param($key, $value) {
  return save_param($key, $value);
}

function set_variable($key, $value) {
  return save_param($key, $value);
}

function get_variable($name) {
  return get_param($name);
}

function save_variable($name, $value) {
  return save_param($name, $value);
}

function get_param($item) {
  $sql = "SELECT `content` FROM `2kt_params` WHERE item='{$item}'";
  $result = exec_sql($sql);
  if ($result && count($result) == 1) {
    // 如果有且仅有一个查询结果
    $content = $result[0]['content'];
    if (is_numeric($content)) {
      // 值为数字
      if (ctype_digit($content)) {
        // 数值为整数
        return intval($content);
      } else {
        // 数值为小数
        return floatval($content);
      }
    } else {
      // 结果不为数字
      $content_json = json_decode($content, true);
      if (json_last_error() == JSON_ERROR_NONE) {
        // 结果为JSON
        return $content_json;
      } else {
        // 返回元始结果
        return $content;
      }
    }
  } else {
    // 如果没有查询结果或者查询到多个结果
    return null;
  }
}

function save_param($item, $content) {
  $content_string = '';
  if (is_null($content)) {
    // 如果为NULL则不保存
    return delete_param($item);
  } elseif (is_numeric($content)) {
    // 如果是数字
    $content_string = $content;
  } elseif (is_string($content)) {
    // 如果是字符串
    $content_string = $content;
    $content_string = str_replace("\"", "\\\"", $content_string);
    $content_string = str_replace("'", "\\'", $content_string);
  } elseif (is_bool($content)) {
    // 如果是布尔值
    $content_string = $content ? 1 : 0;
  } else {
    // 数组或对象
    $content_string = json_encode($content, JSON_UNESCAPED_UNICODE);
    $content_string = str_replace("\"", "\\\"", $content_string);
    $content_string = str_replace("'", "\\'", $content_string);
  }
  $sql = "INSERT INTO `2kt_params` (`item`, `content`) VALUES ('{$item}', '{$content_string}') ON DUPLICATE KEY UPDATE `content` = '{$content_string}'";
  $result = exec_sql($sql);
  if (!$result) {
    logfile('save_param', $sql);
  }
  return $result;
}

function delete_param($item) {
  $sql = "DELETE FROM `2kt_params` WHERE item='{$item}'";
  $result = exec_sql($sql);
  if (!$result) {
    logfile('delete_param', $sql);
  }
  return $result;
}